package InterfaceStaff;

import java.sql.*;
import java.util.*;

public class Presensi {

    private Connection conn;

    public Presensi(Connection koneksi) {
        this.conn = koneksi;
    }

    public static Presensi getKoneksi() throws SQLException {
        Presensi kon = new Presensi(tools.KoneksiDataBase.KoneksiDataBase());
        return kon;
    }

    public void tambah(TabelPresensi mhs) throws SQLException {
//=======
    /*
     * Fungsi ini digunakan untuk menambah data mahasiswa yang mengikuti mata kuliah tertentu
     */
   
//>>>>>>> .r55
        String NIM = mhs.getNim().getNIM();
        String makul = mhs.getId_matakuliah().getMakul();
        String pengampu = mhs.getId_pengampu().getNama_pengampu();
        int jum = 0;
        int jum2 = 0;
        int jum3 = 0;

        String sql = "insert into"
                + " presensi (NIM, ID_MATAKULIAH, ID_PENGAMPU, TOTALKEHADIRAN, PERSEN, STATUS)"
                + " values('" + NIM + "',(select ID_MATAKULIAH from MATAKULIAH where NAMA_MATAKULIAH= '" + makul
                + "'),(select ID_PENGAMPU from PENGAMPU where NAMA_PENGAMPU= '" + pengampu + "'), '" + jum + "','" 
                + jum2 +"','" + jum3 + "')";
        Statement stat = conn.createStatement();
        stat.executeUpdate(sql);
    }

    /*
     * fungsi ini digunakan untuk menghapus data mahasiswa yang mengikuti mata kuliah tertentu
     */
    public void delete(Mahasiswa mhs) throws SQLException {
        String NIM = mhs.getNIM();
        String sql = "delete from"
                + " presensi"
                + " where NIM = '" + NIM + "'";
        Statement stat = conn.createStatement();
        stat.executeUpdate(sql);
    }

    /*
     * fungsi ini digunakan untuk mengambil data mahasiswa yang sudah terdapat di database dan
     * menampilkannya di tabel yang terdapat pada FormPresensi
     */
    public List<Mahasiswa> getAll() throws SQLException {
        PreparedStatement psmt = null;
        ResultSet rset = null;
        conn.setAutoCommit(false);
        String sql = "select p.NIM, m.nama from presensi p, mahasiswa m"
                + " where p.NIM = m.NIM order by NIM";
        psmt = conn.prepareCall(sql);
        rset = psmt.executeQuery();
        List<Mahasiswa> kategori = new ArrayList<Mahasiswa>();
        while (rset.next()) {
            Mahasiswa k = new Mahasiswa();
            k.setNIM(rset.getString(1));
            k.setNama(rset.getString(2));
            kategori.add(k);
        }
        conn.commit();
        return kategori;
    }

    /*
     * fungsi ini digunakan untuk mengambil data pengampu yang sudah terdapat di database dan
     * menampilkannya di tabel yang terdapat pada FormPresensi
     */
    public List<Pengampu> getAllPengampu() throws SQLException {
        PreparedStatement psmt = null;
        ResultSet rset = null;
        conn.setAutoCommit(false);
        String sql = "Select nama_pengampu from pengampu";
        psmt = conn.prepareCall(sql);
        rset = psmt.executeQuery();
        List<Pengampu> pengampu = new ArrayList<Pengampu>();
        while (rset.next()) {
            Pengampu k = new Pengampu();
            k.setNama_pengampu(rset.getString(1));
            pengampu.add(k);
        }
        conn.commit();
        return pengampu;
    }

    /*
     * fungsi ini digunakan untuk mengambil data Makul yang sudah terdapat di database dan
     * menampilkannya di tabel yang terdapat pada FormPresensi
     */
    public List<MataKuliah> getAllMakul() throws SQLException {
        PreparedStatement psmt = null;
        ResultSet rset = null;
        conn.setAutoCommit(false);
        String sql = "Select nama_matakuliah from matakuliah";
        psmt = conn.prepareCall(sql);
        rset = psmt.executeQuery();
        List<MataKuliah> makul = new ArrayList<MataKuliah>();
        while (rset.next()) {
            MataKuliah k = new MataKuliah();
            k.setMakul(rset.getString(1));
            makul.add(k);
        }
        conn.commit();
        return makul;
    }

    /*
     * fungsi ini digunakan untuk menampilkan data mahasiswa berdasarkan Makul dan Dosen yang
     * diambil pada saat tertentu.
     */
    public List<Mahasiswa> getAllCari(TabelPresensi mk) throws SQLException {
        PreparedStatement psmt = null;
        ResultSet rset = null;
        conn.setAutoCommit(false);
        String makul = mk.getId_matakuliah().getMakul();
        String pengampu = mk.getId_pengampu().getNama_pengampu();

        String sql = "Select p.NIM, m.nama from presensi p, mahasiswa m"
                + " where p.nim = m.nim AND" + " p.id_matakuliah = (select id_matakuliah from matakuliah where nama_matakuliah = '" + makul
                + "') AND p.id_pengampu = (select id_pengampu from pengampu where nama_pengampu = '" + pengampu
                + "') order by NIM";
        psmt = conn.prepareCall(sql);
        rset = psmt.executeQuery();
        List<Mahasiswa> kategori = new ArrayList<Mahasiswa>();
        while (rset.next()) {
            Mahasiswa k = new Mahasiswa();
            k.setNIM(rset.getString(1));
            k.setNama(rset.getString(2));
            kategori.add(k);
        }
        conn.commit();
        return kategori;
    }
}
